<script setup lang="ts">
import ApproveCo from "@/components/ApproveCo.vue";
import { computed, onMounted } from "vue";
import { ref } from "vue";
import { getM10L10Approve } from "@/api/apply";
import { useRoute } from "vue-router";

const router = useRoute();

const docid = ref<string[]>([]);
const currentdoc = ref("");
//防止父組件還未掛載完成，就開始掛載子組件，造成數據缺失。並且用戶每次操作都需要重新改變來實現子組件數據加載。
const isMounted = ref(0);
//從代辦事項或流程追蹤進入，有指定單號進入指定，無指定列出所有

//獲取當前用戶下所有單據--只查詢L10,M10的，流程位於40,20
onMounted(() => {
  getApproveDocid().then((res)=>{
    if(res){
      isMounted.value++;
    }
  });
});

//獲取用戶待處理單號列表，並判斷是否是從路由進來的，如果是，則使用路由單號作為當前單號。
//如果不是，則根據查詢列表第一個單號作為當前單號。
async function getApproveDocid(): Promise<any> {
  return new Promise((resolve, reject) => {
    getM10L10Approve().then((res: any) => {
      res.forEach((item: any) => {
        docid.value.push(item.docid);
      });
      let { docidtmep } = router.query;
      if (typeof docidtmep !== "undefined" && docidtmep !== "") {
        //從路由傳進來的單號和加載獲得的單號有重複，要去掉重複的單號
        currentdoc.value = docidtmep === null ? "" : docidtmep.toString();
        docid.value.filter((item) =>
          docid.value.some((itme1) => {
            item === itme1;
          })
        );
      } else {
        currentdoc.value = docid.value[0];
      }
      resolve(res)
    })
    .catch((err)=>{
      reject(err)
    });
  });
}

//上一個--獲取上一個單號
function forword() {
  isMounted.value++;
  currentdoc.value = docid.value[docid.value.indexOf(currentdoc.value) - 1];
}
const forwordEnable = computed(() => {
  return docid.value.indexOf(currentdoc.value) === 0 ? false : true;
});
//下一個--獲取下一個單號
function next() {
  isMounted.value++;
  currentdoc.value = docid.value[docid.value.indexOf(currentdoc.value) + 1];
}
const nextEnable = computed(() => {
  return docid.value.indexOf(currentdoc.value) === docid.value.length - 1 ? false : true;
});
//送出--退回需要重置單號列表。在不刷新頁面的前提下，如果用戶處理的當前單號的前一個單號有數據，則當前單號需要變化
//如果用戶前一個單號沒有數據，則當前單號為下一個單號，如果下一個單號也沒有。為空。
//按照設定流程每個流程不會出現同一人，如果用戶僅有一個需要處理的單號，當前單號置為空即是合理
//為防止獲取數據覆蓋當前單號，使用tempCurrentDocid記錄當前單號
//送出或退回需要將列表清空
function resetdocid() {
  let index: number = docid.value.indexOf(currentdoc.value);
  let tempCurrentDocid = ""
  if (docid.value[index - 1]) {
    tempCurrentDocid = docid.value[index - 1];
  } else if (docid.value[index + 1]) {
    tempCurrentDocid = docid.value[index + 1];
  } else {
    tempCurrentDocid = "";
  }
  docid.value = []
  getApproveDocid().then((res)=>{
    if(res){
      currentdoc.value = tempCurrentDocid;
      isMounted.value++;
    }
  })
}
</script>

<template>
  <main>
    <div class="apply_box">
      <ApproveCo
        @resetdocid="resetdocid"
        :docid="currentdoc"
        :ismounted="isMounted"
        @forword="forword"
        @next="next"
        :forwordEnable="forwordEnable"
        :nextEnable="nextEnable"
      ></ApproveCo>
    </div>
  </main>
</template>

<style></style>
